package com.team9.fitness.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.Duration;
import java.time.LocalDateTime;

/**
 * 运动记录实体类
 * 
 * 存储用户的运动记录信息：
 * - 基本信息：用户ID、运动ID、开始时间、结束时间
 * - 运动数据：心率、速度等运动指标
 * - 状态管理：进行中/已完成状态
 * - 时长计算：自动计算运动时长
 * 
 * 支持的运动数据类型：
 * - 心率数据：平均心率、最大心率
 * - 速度数据：平均速度、最大速度
 * - 时长数据：运动持续时间
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ExerciseRecord {
    private Long id;
    private Long userId; // 用户ID
    private Long exerciseId; // 运动ID
    private LocalDateTime startTime; // 开始时间
    private LocalDateTime endTime; // 结束时间
    private Duration duration; // 运动时长
    private Long durationSeconds; // 运动时长（秒）
    private Double avgHeartRate; // 平均心率
    private Double maxHeartRate; // 最大心率
    private Double avgSpeed; // 平均速率
    private Double maxSpeed; // 最大速率
    private String status; // 状态：进行中/已完成
    private String exerciseName; // 运动名称（用于显示）
    private Boolean hasSpeed; // 是否有速率（从运动信息获取）
    private Boolean hasHeartRate; // 是否有心率（从运动信息获取）
    private LocalDateTime createdAt;

    public void setCreatedAtIfNull() {
        if (this.createdAt == null) {
            this.createdAt = LocalDateTime.now();
        }
    }

    /**
     * 计算运动时长
     */
    public void calculateDuration() {
        if (this.startTime != null && this.endTime != null) {
            this.duration = Duration.between(this.startTime, this.endTime);
            this.durationSeconds = this.duration.getSeconds();
        }
    }

    /**
     * 获取格式化的运动时长
     */
    public String getFormattedDuration() {
        if (this.duration == null) {
            return "00:00:00";
        }
        long hours = this.duration.toHours();
        long minutes = this.duration.toMinutesPart();
        long seconds = this.duration.toSecondsPart();
        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    }
}
